From 21e79ab90242d436c3325efd4c741910f5664b01 Mon Sep 17 00:00:00 2001 From: "mjw@wray-m-3.hpl.hp.com" Date: Wed, 27 Apr 2005 14:42:44 +0000 Subject: [PATCH] bitkeeper revision 1.1327.2.10 (426fa4e4eW-9e4FXXSNCILoSYO6KKA) Add error handling so that disconnecting from a console producing fast output doesn't cause an error loop. Signed-off-by: Mike Wray --- tools/python/xen/xend/server/console.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/python/xen/xend/server/console.py b/tools/python/xen/xend/server/console.py index ac63703f21..1cd1bb5df0 100755 --- a/tools/python/xen/xend/server/console.py +++ b/tools/python/xen/xend/server/console.py @@ -2,7 +2,8 @@ import socket import threading - +from errno import EAGAIN, EINTR, EWOULDBLOCK + from xen.web import reactor, protocol from xen.lowlevel import xu @@ -278,15 +279,20 @@ class ConsoleDev(Dev): self.lock.acquire() if self.closed(): return -1 - if not self.conn: - return 0 - while not self.obuf.empty(): + writes = 0 + while self.conn and (writes < 100) and (not self.obuf.empty()): try: + writes += 1 bytes = self.conn.write(self.obuf.peek()) if bytes > 0: self.obuf.discard(bytes) - except socket.error: - pass + except socket.error, err: + if err.args[0] in (EWOULDBLOCK, EAGAIN, EINTR): + pass + else: + self.disconnect() + break + finally: self.lock.release() return 0 -- 2.30.2